package cn.felord.security.cloud.oauth2.resource.server.autoconfigure;

import org.springframework.security.core.Authentication;

import javax.servlet.http.HttpServletRequest;
import java.util.function.Predicate;

/**
 * 动态权限控制
 */
public interface CheckerBean {
    /**
     * 检查当前认证用户是否有访问当前请求资源的权限
     *
     * @param authentication 当前用户认证信息
     * @param request        当前请求
     * @return  是否放行
     */
    boolean check(Authentication authentication, HttpServletRequest request);

    /**
     * 根据request 来设置最优先级的白名单/黑名单规则，在{@link #check(Authentication, HttpServletRequest)}方法中使用
     *
     * @return the white predicate
     */
    default Predicate<HttpServletRequest> aclPredicate() {
        return request -> false;
    }

}
